package br.com.simulador.vo;

import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

import org.apache.commons.beanutils.BeanUtils;
import org.jboss.seam.annotations.Name;

import br.com.simulador.model.Questao;
import br.com.simulador.model.Simulado;
import br.com.simulador.model.Tag;
@Name("simuladoVO")
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class SimuladoVO implements Serializable {
	@XmlTransient
	private Simulado simulado;
	private Long id;

	private String descricao;
	private Date disponivel_ate;

	private Boolean dinamica;

	private Long quantidade_questao;

	private Long tempo_reposta;
	@XmlElementWrapper(name="tags")                                                                          
	@XmlElement(name="tag")
	private List<TagVO> tags=new ArrayList<TagVO>();	
	@XmlElementWrapper(name="questoes")                                                                          
	@XmlElement(name="questao")
	private List<QuestaoVO> questoes=new ArrayList<QuestaoVO>();	
	private StatusSimuladoVO status_;
	
	
	public SimuladoVO() {
		super();
		// TODO Auto-generated constructor stub
	}
	public SimuladoVO(Simulado simulado) {
		super();
		this.simulado = simulado;
		try {
			BeanUtils.copyProperties(this, this.simulado);
			for(Tag tag : this.simulado.getTags()){
				this.tags.add(new TagVO(tag));
				
			}
			for(Questao questao : this.simulado.getQuestoes()){
				this.questoes.add(new QuestaoVO(questao));
			}
			status_ = new StatusSimuladoVO(this.simulado.getStatus());
			
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public Date getDisponivel_ate() {
		return disponivel_ate;
	}
	public void setDisponivel_ate(Date disponivel_ate) {
		this.disponivel_ate = disponivel_ate;
	}
	public Boolean getDinamica() {
		return dinamica;
	}
	public void setDinamica(Boolean dinamica) {
		this.dinamica = dinamica;
	}
	public Long getQuantidade_questao() {
		return quantidade_questao;
	}
	public void setQuantidade_questao(Long quantidade_questao) {
		this.quantidade_questao = quantidade_questao;
	}
	public Long getTempo_reposta() {
		return tempo_reposta;
	}
	public void setTempo_reposta(Long tempo_reposta) {
		this.tempo_reposta = tempo_reposta;
	}


}
